package controller;

import java.util.ArrayList;
import java.util.List;

import model.PlanProduccion;
import beans.PlanProduccionBean;
import dao.HibernatePlanProduccionDAO;
import dto.PlanProduccionDTO;

public class AdministradorPlanProduccion {
	private static AdministradorPlanProduccion instancia;

	private AdministradorPlanProduccion() {

	}

	public static AdministradorPlanProduccion getInstancia() {
		if (instancia == null) {
			instancia = new AdministradorPlanProduccion();
		}
		return instancia;
	}

	public List<PlanProduccionBean> fromModelToBean(
			List<PlanProduccion> planProduccions) {
		List<PlanProduccionBean> planProduccionsBean = new ArrayList<PlanProduccionBean>();
		for (PlanProduccion planProduccion : planProduccions) {
			planProduccionsBean.add(fromModelTOBean(planProduccion));
		}
		return planProduccionsBean;
	}

	public PlanProduccionBean fromModelTOBean(PlanProduccion planProduccion) {
		PlanProduccionBean planProduccionBean = null;
		if (planProduccion != null) {
			planProduccionBean = new PlanProduccionBean();
			planProduccionBean.setArea(AdministradorArea.getInstancia()
					.fromModelTOBean(planProduccion.getArea()));
			planProduccionBean.setId(planProduccion.getId());
			planProduccionBean.setEstado(planProduccion.getEstado());
			planProduccionBean.setFecha(planProduccion.getFecha());
			planProduccionBean.setItems(AdministradorItemPlanProduccion
					.getInstancia().fromModelTOBean(planProduccion.getItems()));
			planProduccionBean.setTiempo(planProduccion.getTiempo());
			planProduccionBean.setPorcentaje(planProduccion.getPorcentaje());
			planProduccionBean.setSucursal(AdministradorSucursal.getInstancia()
					.fromModelTOBean(planProduccion.getSucursal()));
		}
		return planProduccionBean;
	}

	public List<PlanProduccion> fromDTOTOModel(
			List<PlanProduccionDTO> planProduccionsDTO) {
		List<PlanProduccion> planProduccions = new ArrayList<PlanProduccion>();
		for (PlanProduccionDTO planProduccionDTO : planProduccionsDTO) {
			planProduccions.add(fromDTOTOModel(planProduccionDTO));
		}
		return planProduccions;
	}

	public PlanProduccion fromDTOTOModel(PlanProduccionDTO planProduccionDTO) {
		PlanProduccion planProduccion = null;
		if (planProduccionDTO != null) {
			planProduccion = new PlanProduccion();
			planProduccion.setArea(AdministradorArea.getInstancia()
					.fromDTOTOModel(planProduccionDTO.getArea()));
			planProduccion.setId(planProduccionDTO.getId());
			planProduccion.setEstado(planProduccionDTO.getEstado());
			planProduccion.setFecha(planProduccionDTO.getFecha());
			planProduccion.setItems(AdministradorItemPlanProduccion
					.getInstancia()
					.fromDTOTOModel(planProduccionDTO.getItems()));
			planProduccion.setTiempo(planProduccionDTO.getTiempo());
			planProduccion.setPorcentaje(planProduccionDTO.getPorcentaje());
			planProduccion.setSucursal(AdministradorSucursal.getInstancia()
					.fromDTOTOModel(planProduccionDTO.getSucursal()));
		}
		return planProduccion;
	}

	public List<PlanProduccionDTO> fromModelTODTO(
			List<PlanProduccion> planProduccions) {
		List<PlanProduccionDTO> planProduccionsDTO = new ArrayList<PlanProduccionDTO>();
		for (PlanProduccion planProduccion : planProduccions) {
			planProduccionsDTO.add(fromModelTODTO(planProduccion));
		}
		return planProduccionsDTO;
	}

	public PlanProduccionDTO fromModelTODTO(PlanProduccion planProduccion) {
		PlanProduccionDTO planProduccionDTO = null;
		if (planProduccion != null) {
			planProduccionDTO = new PlanProduccionDTO();
			planProduccionDTO.setArea(AdministradorArea.getInstancia()
					.fromModelTODTO(planProduccion.getArea()));
			planProduccionDTO.setId(planProduccion.getId());
			planProduccionDTO.setEstado(planProduccion.getEstado());
			planProduccionDTO.setFecha(planProduccion.getFecha());
			planProduccionDTO.setItems(AdministradorItemPlanProduccion
					.getInstancia().fromModelTODTO(planProduccion.getItems()));
			planProduccionDTO.setTiempo(planProduccion.getTiempo());
			planProduccionDTO.setPorcentaje(planProduccion.getPorcentaje());
			planProduccionDTO.setSucursal(AdministradorSucursal.getInstancia()
					.fromModelTODTO(planProduccion.getSucursal()));
		}
		return planProduccionDTO;
	}

	public List<PlanProduccion> fromBeanTOModel(
			List<PlanProduccionBean> planProduccionsBean) {
		List<PlanProduccion> planProduccions = new ArrayList<PlanProduccion>();
		for (PlanProduccionBean planProduccionBean : planProduccionsBean) {
			planProduccions.add(fromBeanTOModel(planProduccionBean));
		}
		return planProduccions;
	}

	public PlanProduccion fromBeanTOModel(PlanProduccionBean planProduccionBean) {
		PlanProduccion planProduccion = null;
		if (planProduccionBean != null) {
			planProduccion = new PlanProduccion();
			planProduccion.setArea(AdministradorArea.getInstancia()
					.fromBeanTOModel(planProduccionBean.getArea()));
			planProduccion.setId(planProduccionBean.getId());
			planProduccion.setEstado(planProduccionBean.getEstado());
			planProduccion.setFecha(planProduccionBean.getFecha());
			planProduccion.setItems(AdministradorItemPlanProduccion
					.getInstancia().fromBeanTOModel(
							planProduccionBean.getItems()));
			planProduccion.setTiempo(planProduccionBean.getTiempo());
			planProduccion.setPorcentaje(planProduccionBean.getPorcentaje());
			planProduccion.setSucursal(AdministradorSucursal.getInstancia()
					.fromBeanTOModel(planProduccionBean.getSucursal()));
		}
		return planProduccion;
	}

	public void grabarPlanProduccion(PlanProduccion planProduccion) {
		PlanProduccionBean fb = fromModelTOBean(planProduccion);
		HibernatePlanProduccionDAO.getInstancia().grabarPlanProduccion(fb);

	}

	public PlanProduccion buscarPlanProduccion(PlanProduccion f) {
		PlanProduccionBean fb = fromModelTOBean(f);
		fb = HibernatePlanProduccionDAO.getInstancia().buscarPlanProduccion(fb);
		return fromBeanTOModel(fb);
	}

	public List<PlanProduccionBean> fromModelTOBean(List<PlanProduccion> planes) {
		List<PlanProduccionBean> planesb = new ArrayList<PlanProduccionBean>();
		for (PlanProduccion planProduccion : planes) {
			PlanProduccionBean planb = fromModelTOBean(planProduccion);
			planesb.add(planb);
		}
		return planesb;
	}

	public void updatePlanProduccion(PlanProduccion plan) {
		PlanProduccionBean ppb = fromModelTOBean(plan);
		HibernatePlanProduccionDAO.getInstancia().update(ppb);

	}



	public List<PlanProduccion> listPlanesProduccion() {
		List<PlanProduccionBean> planesBean = HibernatePlanProduccionDAO
				.getInstancia().list();
		return fromBeanTOModel(planesBean);
	}

	public void merge(PlanProduccion planProduccion) {
		PlanProduccionBean pb=fromModelTOBean(planProduccion);
		HibernatePlanProduccionDAO.getInstancia().merge(pb);
		
	}
}
